home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-03-25 | 7.6 KB | 309 lines | [TEXT/MSWD] |
- var {Global variables that are set to zero when macros are loaded.}
- SliceThickness,scale:real;
- nImages:integer;
- ScaleSet:boolean;
-
-
- procedure CheckImages;
- begin
- if (nPics<2) or not AllSameSize then begin
- PutMessage('Reconstruction requires a set of equal size images.');
- Exit;
- end;
- end;
-
-
- procedure GetSliceThickness;
- begin
- if scale=0 then scale:=1.5;
- if SliceThickness=0 then SliceThickness:=5;
- SliceThickness:=GetNumber('SliceThickness(pixels):',SliceThickness);
- end;
-
-
- procedure GetCount;
- begin
- if nImages=0 then nImages:=nPics;
- nImages:=GetNumber('Number of images to reconstruct:',nImages);
- end;
-
-
- macro 'Reconstruct One Slice [R]'
- var
- width,height,i,nSlices,dst,DstLeft,DstTop,x,y:integer;
- x1,y1,x2,y2,LineWidth,DstWidth,DstHeight:integer;
- RoiLeft,RoiTop,RoiWidth,RoiHeight:integer;
- HorizontalSlice:boolean;
- begin
- CheckImages;
- if SliceThickness=0 then GetSliceThickness;
- nSlices:=nPics;
- GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
- if RoiWidth=0 then begin
- PutMessage('Please make a horizontally or vertically oriented rectangular selection.');
- exit;
- end;
- HorizontalSlice:=RoiWidth>=RoiHeight;
- if HorizontalSlice then begin
- dstWidth:=RoiWidth*scale;
- dstHeight:=nSlices*SliceThickness*scale
- end else begin
- dstWidth:=RoiHeight*scale;
- dstHeight:=nSlices*SliceThickness*scale;
- end;
- SetNewSize(dstWidth,dstHeight);
- MakeNewWindow('Reconstruction');
- dst:=nPics;
- SetScaling('Bilinear; Same Window');
- if HorizontalSlice then begin
- y:=RoiTop+RoiHeight/2;
- dstLeft:=(dstWidth-RoiWidth)/2;
- dstTop:=(dstHeight-nSlices)/2
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetRow(RoiLeft,y,RoiWidth);
- SelectPic(dst);
- PutRow(dstLeft,dstTop+nSlices-i,RoiWidth);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiWidth);
- MakeRoi(dstLeft,dstTop,RoiWidth,nSlices);
- end else begin
- x:=RoiLeft+RoiWidth/2;
- dstLeft:=(dstWidth-RoiHeight)/2;
- dstTop:=(dstHeight-nSlices)/2
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetColumn(x,RoiTop,RoiHeight);
- SelectPic(dst);
- PutRow(dstLeft,dstTop+nSlices-i,RoiHeight);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiHeight);
- MakeRoi(DstLeft,dstTop,RoiHeight,nSlices);
- end;
- ScaleAndRotate(scale,SliceThickness*scale,0);
- KillRoi;
- end;
-
-
- macro 'Reconstruct Horizontal Set [H]'
- var
- i,j,nSlices,dst,dstLeft,dstTop,x,y:integer;
- x1,y1,x2,y2,LineWidth,DstWidth,DstHeight:integer;
- RoiLeft,RoiTop,RoiWidth,RoiHeight:integer;
- dstImageNum,step:integer;
- begin
- CheckImages;
- if SliceThickness=0 then GetSliceThickness;
- GetCount;
- if not ScaleSet then scale:=1;
- nSlices:=nPics;
- GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
- if RoiWidth=0 then begin
- PutMessage('Please make a rectangular selection.');
- exit;
- end;
- dstWidth := RoiWidth*scale;
- dstHeight := nSlices*SliceThickness*scale;
- dst := nPics;
- step:=RoiHeight div nImages;
- SetScaling('Bilinear; Same Window');
- for j:=1 to nImages do begin
- dst:=dst+1
- SetNewSize(dstWidth,dstHeight);
- MakeNewWindow(j:3,'-',step:2);
- dstLeft:=(dstWidth-RoiWidth)/2;
- dstTop:=(dstHeight-nSlices)/2
- y:=RoiTop+(j*step)*RoiHeight/RoiHeight
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetRow(RoiLeft,y,RoiWidth);
- SelectPic(dst);
- PutRow(dstLeft,dstTop+nSlices-i,RoiWidth);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiWidth);
- MakeRoi(dstLeft,dstTop,RoiWidth,nSlices);
- ScaleAndRotate(scale,SliceThickness*scale,0);
- KillRoi;
- end;
- for i:=1 to nSlices do begin
- ChoosePic(1);
- Dispose;
- end;
- SliceThickness:=0;
- end;
-
-
- macro 'Horizontal Set to Disk'
- var
- i,j,nSlices,dstLeft,dstTop,x,y,step:integer;
- x1,y1,x2,y2,LineWidth,DstWidth,DstHeight:integer;
- RoiLeft,RoiTop,RoiWidth,RoiHeight:integer;
- begin
- CheckImages;
- if SliceThickness=0 then GetSliceThickness;
- GetCount;
- if not ScaleSet then scale:=1;
- nSlices:=nPics;
- GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
- if RoiWidth=0 then begin
- PutMessage('Please make a rectangular selection.');
- exit;
- end;
- dstWidth := RoiWidth*scale;
- dstHeight := nSlices*SliceThickness*scale;
- step:=RoiHeight div nImages;
- SetScaling('Bilinear; Same Window');
- for j:=1 to nImages do begin
- SetNewSize(dstWidth,dstHeight);
- MakeNewWindow(j:3,'-',step:2);
- dstLeft:=(dstWidth-RoiWidth)/2;
- dstTop:=(dstHeight-nSlices)/2
- y:=RoiTop+(j*step)*RoiHeight/RoiHeight
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetRow(RoiLeft,y,RoiWidth);
- SelectPic(nPics);
- PutRow(dstLeft,dstTop+nSlices-i,RoiWidth);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiWidth);
- MakeRoi(dstLeft,dstTop,RoiWidth,nSlices);
- ScaleAndRotate(scale,SliceThickness*scale,0);
- KillRoi;
- SaveAs (j);
- Dispose;
- end;
- end;
-
-
- macro 'Reconstruct Vertical Set [V]'
- var
- i,j,nSlices,dst,dstLeft,dstTop,x,y:integer;
- x1,y1,x2,y2,LineWidth,DstWidth,DstHeight:integer;
- RoiLeft,RoiTop,RoiWidth,RoiHeight,step:integer;
- begin
- CheckImages;
- if SliceThickness=0 then GetSliceThickness;
- GetCount;
- if not ScaleSet then scale:=1;
- nSlices:=nPics;
- GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
- if RoiWidth=0 then begin
- PutMessage('Please make a rectangular selection.');
- exit;
- end;
- dstWidth := RoiHeight*scale;
- dstHeight := nSlices*SliceThickness*scale;
- dst := nPics;
- step:=RoiWidth div nImages;
- SetScaling('Bilinear; Same Window');
- for j:=1 to nImages do begin
- dst:=dst+1
- SetNewSize(dstWidth,dstHeight);
- MakeNewWindow(j:3,'-',step:2);
- dstLeft:=(dstWidth-RoiHeight)/2;
- dstTop:=(dstHeight-nSlices)/2
- x:=RoiLeft+(j*step)*RoiWidth/RoiWidth
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetColumn(x,RoiTop,RoiHeight);
- SelectPic(dst);
- PutRow(dstLeft,dstTop+nSlices-i,RoiHeight);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiHeight);
- MakeRoi(dstLeft,dstTop,RoiHeight,nSlices);
- ScaleAndRotate(scale,SliceThickness*scale,0);
- KillRoi;
- end;
- for i:=1 to nSlices do begin
- ChoosePic(1);
- Dispose;
- end;
- SliceThickness:=0;
- end;
-
-
- macro 'Vertical Set to Disk';
- var
- i,j,nSlices,dst,dstLeft,dstTop,x,y:integer;
- x1,y1,x2,y2,LineWidth,DstWidth,DstHeight:integer;
- RoiLeft,RoiTop,RoiWidth,RoiHeight,step:integer;
- begin
- CheckImages;
- if SliceThickness=0 then GetSliceThickness;
- GetCount;
- if not ScaleSet then scale:=1;
- nSlices:=nPics;
- GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
- if RoiWidth=0 then begin
- PutMessage('Please make a rectangular selection.');
- exit;
- end;
- dstWidth := RoiHeight*scale;
- dstHeight := nSlices*SliceThickness*scale;
- dst := nPics;
- step:=RoiWidth div nImages;
- SetScaling('Bilinear; Same Window');
- for j:=1 to nImages do begin
- dst:=dst+1
- SetNewSize(dstWidth,dstHeight);
- MakeNewWindow(j:3,'-',step:2);
- dstLeft:=(dstWidth-RoiHeight)/2;
- dstTop:=(dstHeight-nSlices)/2
- x:=RoiLeft+(j*step)*RoiWidth/RoiWidth
- for i:=1 to nSlices do begin
- ChoosePic(i);
- GetColumn(x,RoiTop,RoiHeight);
- SelectPic(nPics);
- PutRow(dstLeft,dstTop+nSlices-i,RoiHeight);
- end;
- PutRow(dstLeft,dstTop+nSlices,RoiHeight);
- MakeRoi(dstLeft,dstTop,RoiHeight,nSlices);
- ScaleAndRotate(scale,SliceThickness*scale,0);
- KillRoi;
- SaveAs (j);
- Dispose;
- end;
- end;
-
-
- macro 'Renumber Windows';
- var
- i:integer;
- begin
- for i:= 1 to nPics do begin
- SelectPic(i);
- SetPicName(i);
- end;
- end;
-
-
- macro 'Dispose All Windows'
- begin
- DisposeAll;
- end;
-
-
- macro '(---'; begin end;
-
-
- macro 'Set Slice Thickness [T]';
- begin
- GetSliceThickness;
- end;
-
-
- Macro 'Set Scale [S]';
- begin
- if scale=0 then scale:=1.5;
- scale:=GetNumber('ScaleFactor:',scale);
- ScaleSet:=true;
- end;
-
-
- Macro 'Set number of Images';
- begin
- GetCount;
- end;
-
-
-